 
  

 






<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html>

<!-- Mirrored from www.javapractices.com/topic/TopicAction.do;jsessionid=4FCCB481C702D708A7360133D128E359?Id=126 by HTTrack Website Copier/3.x [XR&CO'2010], Sun, 12 Jun 2011 17:27:53 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8"><!-- /Added by HTTrack -->
<head>
 <title>
  Java Practices -> Don't declare local variables before use
 </title>
 <link rel="stylesheet" type="text/css" href="../stylesheet8.css" media="all">
 
 <link rel="shortcut icon" href='../images/favicon.ico' type="image/vnd.microsoft.icon">
 <meta name="description" content="Concise presentations of java programming practices, tasks, and conventions, amply illustrated with syntax highlighted code examples.">
 
 <meta name='keywords' content='declare,java,java programming,java practices,java idiom,java style,java design patterns,java coding conventions,'>
 
 
</head>
 
<body>


<div class='menu-bar'>
 
  <a href='../home/HomeAction.html' title='Table of Contents'>Home</a> |
  <a href='../vote/VoteSummaryAction-2.html' title='View Poll Results'>Poll</a> |
   
  <A href='../feedback/FeedbackAction451f-2.html?Operation=Show' title='Send Your Feedback'>Wiki</a> |
  <b><a href='../source/SourceAction-2.html' title='Grab Source Code'>Source Code</a></b><IMG class='no-margin' SRC="../images/goldstar.gif" ALT=""> |

  <a href='http://www.web4j.com/Java_Web_Application_Framework_Overview.jsp?From=1' title='Free Download - Java Web Application Framework'><b>WEB4J</b></a> |
  
  <a href='http://www.date4j.net/' title='Replacement for java.util.Date'><b>DATE4J</b></a> |

   <a href='../references/ReferencesAction-2.html' title='References'>Links</a>
   
  <form action='http://www.javapractices.com/search/SearchAction.do' method='get' class='search-form'>
   <input type='text' name='SearchTerms' value="" size=12 maxlength=50 class='search'>
   <input type='submit' value="Search">
  </form>
 
</div>

<P>



  

 






<p class="display-messages">

 

 

</p>


<div class="main-layout">
 
   

 




<div class='page-title'>Don't declare local variables before use</div>

<div class='main-body'>
 
<br>Most local variables are declared and initialized on the same line,
at the point in the method where both its initial value is available and
the variable itself is immediately useful.
<p>Declaring local variables without using them immediately may unnecessarily
increase their scope. This decreases legibility, and increases the likelihood
of error.
<p>There are two common cases where a local variable is assigned some default
initial value (typically <tt>null, 0, false, </tt>or an empty <code>String</code>) :
<ul>
<li>
variables which need to be visible outside of a <tt>try</tt> block, and
are thus declared and initialized just before the <tt>try</tt> block</li>

<li>
some loop variables, which are initialized to some default value just before
the loop</li>
</ul>
<b>Example</b>
<p>Here, <tt>input</tt> and <tt>output</tt> are examples of local variables
being initialized to <tt>null</tt>, since they need to be visible in both
the <tt>try</tt> and <tt>finally</tt> blocks.
<p>As well, <tt>line</tt> is an example of a loop variable declared and
initialized outside the loop.
<br>
<PRE>

<span class='keyword'>import</span> java.io.*;

<span class='keyword'>public</span> <span class='keyword'>class</span> ReadWriteTextFile {

  <span class='comment'>/**
  * Fetch the entire contents of a text file, and return it in a String.
  * This style of implementation does not throw Exceptions to the caller.
  *
  * @param aFile is a file which already exists and can be read.
  */</span>
  <span class='keyword'>static</span> <span class='keyword'>public</span> String getContents(File aFile) {
    <span class='comment'>//...checks on aFile are elided
</span>    StringBuilder contents = <span class='keyword'>new</span> StringBuilder();
    
    <span class='keyword'>try</span> {
      <span class='comment'>//use buffering, reading one line at a time
</span>      <span class='comment'>//FileReader always assumes default encoding is OK!
</span>      BufferedReader input =  <span class='keyword'>new</span> BufferedReader(<span class='keyword'>new</span> FileReader(aFile));
      <span class='keyword'>try</span> {
        String line = <span class='keyword'>null</span>; <span class='comment'>//not declared within while loop
</span>        <span class='comment'>/*
        * readLine is a bit quirky :
        * it returns the content of a line MINUS the newline.
        * it returns null only for the END of the stream.
        * it returns an empty String if two newlines appear in a row.
        */</span>
        <span class='keyword'>while</span> (( line = input.readLine()) != <span class='keyword'>null</span>){
          contents.append(line);
          contents.append(System.getProperty(<span class='literal'>"line.separator"</span>));
        }
      }
      <span class='keyword'>finally</span> {
        input.close();
      }
    }
    <span class='keyword'>catch</span> (IOException ex){
      ex.printStackTrace();
    }
    
    <span class='keyword'>return</span> contents.toString();
  }

  <span class='comment'>/**
  * Change the contents of text file in its entirety, overwriting any
  * existing text.
  *
  * This style of implementation throws all exceptions to the caller.
  *
  * @param aFile is an existing file which can be written to.
  * @throws IllegalArgumentException if param does not comply.
  * @throws FileNotFoundException if the file does not exist.
  * @throws IOException if problem encountered during write.
  */</span>
  <span class='keyword'>static</span> <span class='keyword'>public</span> <span class='keyword'>void</span> setContents(File aFile, String aContents)
                                 <span class='keyword'>throws</span> FileNotFoundException, IOException {
    <span class='keyword'>if</span> (aFile == <span class='keyword'>null</span>) {
      <span class='keyword'>throw</span> <span class='keyword'>new</span> IllegalArgumentException(<span class='literal'>"File should not be null."</span>);
    }
    <span class='keyword'>if</span> (!aFile.exists()) {
      <span class='keyword'>throw</span> <span class='keyword'>new</span> FileNotFoundException (<span class='literal'>"File does not exist: "</span> + aFile);
    }
    <span class='keyword'>if</span> (!aFile.isFile()) {
      <span class='keyword'>throw</span> <span class='keyword'>new</span> IllegalArgumentException(<span class='literal'>"Should not be a directory: "</span> + aFile);
    }
    <span class='keyword'>if</span> (!aFile.canWrite()) {
      <span class='keyword'>throw</span> <span class='keyword'>new</span> IllegalArgumentException(<span class='literal'>"File cannot be written: "</span> + aFile);
    }

    <span class='comment'>//use buffering
</span>    Writer output = <span class='keyword'>new</span> BufferedWriter(<span class='keyword'>new</span> FileWriter(aFile));
    <span class='keyword'>try</span> {
      <span class='comment'>//FileWriter always assumes default encoding is OK!
</span>      output.write( aContents );
    }
    <span class='keyword'>finally</span> {
      output.close();
    }
  }

  <span class='comment'>/** Simple test harness.   */</span>
  <span class='keyword'>public</span> <span class='keyword'>static</span> <span class='keyword'>void</span> main (String... aArguments) <span class='keyword'>throws</span> IOException {
    File testFile = <span class='keyword'>new</span> File(<span class='literal'>"C:&#092;&#092;Temp&#092;&#092;blah.txt"</span>);
    System.out.println(<span class='literal'>"Original file contents: "</span> + getContents(testFile));
    setContents(testFile, <span class='literal'>"The content of this file has been overwritten..."</span>);
    System.out.println(<span class='literal'>"New file contents: "</span> + getContents(testFile));
  }
} 
</PRE>
<br>
<br>
<br>

</div>




<div class='topic-section'>See Also :</div>
<div class='main-body'>
 
  
  <a href='TopicAction9b86-2.html?Id=14'>Initializing fields to 0-false-null is redundant</a> <br>
 
</div>


<div class='topic-section'>Would you use this technique?</div>
<div class='main-body'>
  
  <form action="http://www.javapractices.com/vote/AddVoteAction.do" method='post'>
    Yes<input type='radio' name='Choice' value='Y' >
    &nbsp;&nbsp;No<input type='radio' name='Choice' value='N'>
    &nbsp;&nbsp;Undecided<input type='radio' name='Choice' value="?" >
    &nbsp;&nbsp;<input type=submit value="Vote" >
    <input type='hidden' name='Operation' value='Apply'>
    <input type='hidden' name='TopicId' value='126'>
  </form>
</div>

<div style='height:10.0em;'></div>

 
 
</div>

  

 





<div align='center' class='legalese'>  
&copy; 2011 Hirondelle Systems |
<a href='../source/SourceAction-2.html'><b>Source Code</b></a><IMG class='no-margin' SRC="../images/goldstar.gif" ALT=""> |
<a href="mailto:webmaster@javapractices.com">Contact</a> |
<a href="http://creativecommons.org/licenses/by-nc-sa/1.0/">License</a> |
<a href='../apps/cjp.rss'>RSS</a>
<!-- ukey="2AC36CD2" -->
<!-- ckey="16DF3D87" -->
<br>

 Individual code snippets can be used under this <a href='../LICENSE.txt'>BSD license</a> - Last updated on June 6, 2010.<br>
 Over 150,000 unique IPs last month - <span title='Java Practices 2.6.5, Mon May 16 00:00:00 EDT 2011'>Built with</span> <a href='http://www.web4j.com/'>WEB4J</a>.<br>
 - In Memoriam : Bill Dirani -
</div>

<script src="../../www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2633428-1";
urchinTracker();
</script>



</body>

<!-- Mirrored from www.javapractices.com/topic/TopicAction.do;jsessionid=4FCCB481C702D708A7360133D128E359?Id=126 by HTTrack Website Copier/3.x [XR&CO'2010], Sun, 12 Jun 2011 17:27:53 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8"><!-- /Added by HTTrack -->
</html>
